Annotations are a form of metadata. Annotations may or may not have a direct effect on the operation of the artifact that the annotations annotate.
Annotations have a number of uses including but not limited to:                a. Enforce semantics—Annotations can be used by a compiler to enforce semantics explicitly declared by a user        b. Information for the compiler—Annotations can be used by the compiler to detect errors or suppress warnings.        c. Compile-time and deployment-time processing—Software tools can process annotations to generate, for example, code and XML files.        d. Runtime processing—Some annotations are available to be examined at runtime.        
Annotations may be processed using annotation processors. Annotation processors may, for example, use a set of reflective Application Programming Interfaces (API) and supporting infrastructure to perform the processing of annotations. Annotation processors may process annotations detected in source code, class files, or other compiled representations or executable output. Executable output, as referred to herein, may correspond to the output of a Compiler or other tools that is intended to be executed by a Runtime Interpreter. As an example, annotation processors may process a first annotation(s), resulting in the production of new source files having further annotations that are to be iteratively processed.
The approaches described in this section are approaches that could be pursued, but not necessarily approaches that have been previously conceived or pursued. Therefore, unless otherwise indicated, it should not be assumed that any of the approaches described in this section qualify as prior art merely by virtue of their inclusion in this section.